import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
//import java.util.ArrayList;
/**
 * Write a description of class Pecera here.
 * 
 * @author Dulce Nataly Guadarra 

 */
public class Pecera extends World
{
    
    /**
     * Constructor for objects of class Pecera.
     * 
     */
    private Bob bob ;// es el actor pricipal (Jugador)
    private int aparece;//te indica cada cuando aparecen los actores que van callendo
    private int acumula;// acumula los segundos
    private Counter mensReloj;//te aparece y va contando el tiempo en el esenario
    private SimpleTimer reloj;//te ayuda a contar cada segundo
    private SimpleTimer relojExtras;// ayuda a contar el tiempo que van a aparecerlos extras
    private SimpleTimer relojPerdiste;//ayuda a quedarce 10 segundos y aparecer el letrero antes de regresar al menu
    private Counter mensPuntos;// te acumula y muestra en la pantalla los puntos 
    private Counter mensVidas;//te acumula numero de vidas 
    private Counter mensAgujas;// acumula las agujas que recolectas 
    private Counter mensNivel ;// va a aumentando de nivel
    private int numeroExtras;// se usa para indicar la cantidad de extras que va a aparecer a la vez
    private GreenfootSound temaJuego;
    private Play jugar;
    private BotonFlecha flecha;
    //private boolean iniReloj;
    private Record record;
    public Pecera()
    {    
        // Create a new world with 600x400 cells with a cell size of 1x1 pixels.
        super(700, 500, 1);
        //menu();
        mensReloj= new Counter();
        reloj = new SimpleTimer();
        reloj.mark();
        addObject(mensReloj,getWidth()/2,20);
        bob = new Bob();
        addObject(bob,300,450);
        aparece = 0;
        acumula =35;
        mensPuntos = new Counter("Puntos: ");
        addObject(mensPuntos,50,20);
        mensVidas= new Counter("Vidas: ");
        mensVidas.setValue(1);
        addObject(mensVidas,getWidth()/3,20);
        mensAgujas= new Counter("Agujas: ");
        addObject(mensAgujas,getWidth()-getWidth()/3,20);
        mensNivel= new Counter ("Nivel: ");
        mensNivel.setValue(1);
        addObject(mensNivel,getWidth()-70,20);
        temaJuego = new GreenfootSound("TemaJuego.mp3");
        numeroExtras = 1;
        temaJuego.playLoop();
        flecha = new BotonFlecha();
        addObject(flecha,50,getHeight()-30);
        relojPerdiste = new SimpleTimer();
        relojPerdiste.mark();
       // iniReloj= true;
        record = new Record();
    }
    public void act()
    {
        if(reloj.millisElapsed() >= 1000){
            reloj.mark();
            mensReloj.add(1);
        }
        if(mensReloj.getValue() >= aparece){
            mandaPosicion();
            if(getNivel()==1)
                aparece = aparece+6;
            else if(getNivel()==2)
                    aparece = aparece+3;
                    else 
                        aparece = aparece+1;
        }
      
        
        if(mensVidas.getValue() < 1){
            Letrero perdiste;
            perdiste= new Letrero("Perdiste");
            temaJuego.stop();
            addObject(perdiste,getWidth()/2,getHeight()/2);
            record.saveHighscore(mensPuntos.getValue());    
            
            Greenfoot.delay(300);
            Greenfoot.setWorld(new Menu());
        }  
        if(mensReloj.getValue()>=acumula){
            if(getNivel()<4)
                aumentaNivel();
            if(numeroExtras < 6)
                numeroExtras++;
            acumula+=20;
        }
        clickAtras();
    }
    /**Elige posicion aleatoriamente que se manda al metodo apareceExtras**/
    public void mandaPosicion()
    {
        int posicion;// te guarda el numero aleatorio
        int x=0;// posicion de x iniciada en 0
        int y=90;// posicion en y nunca cambia    
       
        for(int i= 0; i<numeroExtras;i++){
            posicion =Greenfoot.getRandomNumber(6);
          
            switch(posicion){
                case 0:x=90;
                break;
                case 1:x=190;
                break;
                case 2:x=290;
                break;
                case 3:x= 390;
                break;
                case 4:x= 490;
                break;
                case 5:x= 590;
                break;
                default:break;
            }
            if(getObjectsAt(x,y,Actor.class).isEmpty())
                apareceExtras(x,y);
            else
                i--;
        }
    }
    /**Aparece a los extra aleatoriamente en la posicion que se pasa por parametro **/
    public void apareceExtras(int x,int y)
    {
        
        int tipo= 0;            
        tipo=Greenfoot.getRandomNumber(10);            
        switch(tipo){  
            case 0:
            case 1: addObject(new Plankton(),x , y);
            break;
            case 2:addObject(new Patricio(),x , y);
            break;
            case 3: addObject(new Flor(),x , y);
            break;
            case 4:
            case 5:addObject(new Burbuja(),x , y);
            break;
            case 6: addObject(new Hamburgesa(),x , y);
            break;
            case 7: addObject(new Aguja(),x , y);
            break;
            default:break;

        }
           
    }
    /**Aumenta los puntos del jugador**/
    public void aumentaPuntos()
    {
        mensPuntos.add(1);
    }
    /**Aumenta las vidas del jugador**/
    public void aumentaVidas()
    {
        mensVidas.add(1);
    }
    /**Resta vidas del jugador**/
    public void RestaVidas()
    {
        mensVidas.add(-1);
    }
    /**Aumenta agujas para que el jugador pueda disparar**/
    public void aumentaAgujas()
    {
        mensAgujas.add(1);
    }
    /**Aumenta el nivel del juego**/
    public void aumentaNivel()
    {
        mensNivel.add(1);        
    }
    /**
     * @Regresa el valor del nivel en que se encuetra el juego
     *
     */
    public int getNivel()
    {
        return mensNivel.getValue();
    }
    /**coloca el objeto de la clase BalaA en la posicion del jugador*/
    public void dispara()
    {
       int x = bob.getX();
       int y = bob.getY() ;
       if(mensAgujas.getValue()>0){
           addObject(new BalaA(),x,y);
           mensAgujas.add(-1);
       }
    }
    /**
     * @Regresa un Objecto de la Clase BotonFlecha*/
    public BotonFlecha getFlecha()
    {
        return flecha;
    }
    /**Sobreescribe el metodo stopped para detener la musica **/
    public void stopped()
    {
        super.stopped();
        temaJuego.pause();
    }
    /**Sobreescribe el metodo started para volver a reproducir la musica */
    public void started()
    {
        super.started();
        temaJuego.play();
    }
    /**Metodo que detecta si se hizo click en el botonFelacha y te regresa al menu*/
    public void clickAtras()
    {
        if(Greenfoot.getMouseInfo()!=null){ 
            if(Greenfoot.getMouseInfo().getButton()==1 && Greenfoot.getMouseInfo().getActor() == flecha){  
                temaJuego.stop();
                Greenfoot.setWorld(new Menu());
                
            }
        }
    }
}
